#ifndef STRUCT_H_INCLUDED
#define STRUCT_H_INCLUDED

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>

#define NB_LIGNES 10
#define NB_COL 10

#define NBMAX_FLEUR NB_LIGNES * NB_COL

// Valeur grille
#define GRILLE_VIDE 0
#define GRILLE_FLEUR 1
#define GRILLE_CARNIVORE 2
#define GRILLE_ABEILLE 3
#define GRILLE_RUCHE 4
#define GRILLE_RUCHEENNEMIE 5
#define GRILLE_ENNEMIE 6

// définir un tableau de fleur dont l'id est l'indice du tableau pour retrouver la fleur
// l'emplacement de la fleur est stockée dans la case
// permet de récupérer le nectar d'une fleur sans les coordonnées de la case

typedef struct fleur {
	int id;
	int nectar;
	int estlibre;
	pthread_mutex_t mutex;
}fleur;

typedef struct carnivore {
	int id;
	int qte_abeille;
	pthread_mutex_t mutex;
}carnivore;

typedef struct abeille {
	int num;
	int energie;
	int energiemax;
	int nectar;
	int nectarmax;
	int memx;
	int memy;
	int posx;
	int posy;
	int ruchex;
	int ruchey;
	int num_ruche;
	int duree_vie;
	int vitesse; // entre 0 et 9
	int attaque;
	int defense;
	struct algo * algo;
	pthread_t *thread;
	pthread_mutex_t mutex;
	
}abeille;

typedef struct ruche {
	int qte_nectar;
	int qte_miel;
	int qte_abeilles;
	int num_ruche;
	int posx;
	int posy;
	pthread_t *thread;
	pthread_mutex_t mutex;
}ruche;

typedef struct case_tag {
	int element; 
	int fl;
	int car;
	int qte_abeilles;
	struct ruche * ruche;
	struct liste_abeille * liste_abeille; // liste des abeilles présentes sur cette case
	pthread_mutex_t mutex;
} case_t;

typedef struct liste_abeille {
	struct abeille * abeille; 
	struct liste_abeille * suivante;
} liste_abeille;

typedef struct serveurAff_tag {
	int fin;
	int reqATraiter;
	int noEtape;
	int cptAbeilles;
	pthread_mutex_t mutex;
	pthread_cond_t termine;
	pthread_cond_t requete;
} serveurAff_t;

#endif
